Kernel Module
시스템 부팅 후에 동적으로 loading 할 수 있는 커널 구성 요소를 말한다.
커널을 다시 컴파일하거나 시스템 재부팅 할 필요 없이 커널의 일부분을 교체하는 것이 가능하다.
디바이스 드라이버, 파일 시스템, 네트워크 프로토콜 등이 모듈로 제공
Loading시: modul_init()로 지정된 함수 호출
Unloading시: modul_exit()로 지정된 함수 호출
리눅스 디바이스 드라이버의 특성
1. 커널 코드디바이스 드라이버는 커널의 한 부분으로, 커널의 다른 코드와 마찬가지로 잘못되면 시스템에 치명적인 피해를 줄 수 있다.
2. 커널 인터페이스디바이스 드라이버는 리눅스 커널이나 자신이 속한 서브시스템에 표준 인터페이스를 제공해야 한다.
3. 커널 매커니즘과 서비스디바이스 드라이버는 메모리 할당, 인터럽트 전달, wait queue와 같은 표준 커널 서비스를 사용할 수 있다.
4. Loadable대부분의 리눅스 드라이버는 커널 모듈로서, 필요할 때 Load하고 더이상 필요 없을 때 unload할 수 있다.
5. 설정가능(configurable)리눅스 디바이스 드라이버를 커널에 포함하여 컴파일 할 수 있다.
어떤 장치를 넣을 것인가 커널을 컴파일 할 때 설정 가능